#! /usr/bin/env python 
# -*- coding:utf-8 -*-
import turtle
import datetime

def skip(step): #画笔移动指定的距离

    turtle.penup()
    turtle.forward(step)
    turtle.pendown()

    pass

def set_up(radius): #表盘绘制 radius 表盘的半径

    turtle.reset() #删除图形归位
    turtle.pensize(7)
    turtle.hideturtle()  # 隐藏箭头

    for i in range(60): #循环60次 60个刻度
        skip(radius) #移动到半径处
        if i%5 == 0: #若能被5整除 就画短线
            turtle.forward(20)
            skip(-radius-20) #返回圆心
        else:
            turtle.dot(5) #画点
            skip(-radius) #返回圆心
        turtle.right(6) #向右旋转6度

    pass

def make_hand(name,len):# 创建指针方法

    turtle.reset() #删除图形归位
    skip(-0.1*len) #抬笔移动指定距离
    turtle.begin_poly() #记录多边形
    turtle.forward(1.1*len) #绘制指定长度的指针
    turtle.end_poly()  # 停止记录多边形

    #注册多边形状
    turtle.register_shape(name,turtle.get_poly())

    pass

def init(): # 初始化指针

    global secHand, minHand, hurHand, printer

    turtle.mode("logo")  # 重置Turtle指向上

    drawBorder()

    #建立 时针 分针 秒针
    make_hand("secHand",140) #秒针图形
    make_hand("minHand", 125) #分针图形
    make_hand("hurHand", 70)  #秒针图形

    secHand = turtle.Turtle() # 创建秒针turtle对象
    secHand.shape("secHand") #创建指定秒针名称的形状

    minHand = turtle.Turtle()  # 创建分针turtle对象
    minHand.shape("minHand")  # 创建指定分针名称的形状

    hurHand = turtle.Turtle()  # 创建时针turtle对象
    hurHand.shape("hurHand")  # 创建指定时针名称的形状

    for hand in secHand, minHand, hurHand: #遍历3个指针
        hand.shapesize(1, 1, 5)  # 调整3根指针的粗细
        hand.speed(0)  # 设置速度为最快

    printer = turtle.Turtle()  # 创建绘制文字的Turtle对象
    printer.hideturtle()  # 隐藏箭头
    printer.penup()  # 抬笔

    pass

def drawBorder():
    cyc = turtle.Turtle()
    cyc.penup()
    cradius = 210
    cyc.setpos(cradius,0)
    cyc.pensize(10)
    cyc.pendown()
    cyc.circle(cradius)
    cyc.ht()
    

def week(t):# 获取星期的方法
    week = ["星期一","星期二","星期三","星期四","星期五","星期六","星期天"]
    return week[t.weekday()]

def day(t):
    return "%s年%d月%d日"%(t.year,t.month,t.day)


def tick(): #移动指针的方法

    t = datetime.datetime.today() #获取当前的时间

    second = t.second + t.microsecond * 0.000001  # 计算移动的秒
    minute = t.minute + second / 60  # 计算移动的分
    hour = t.hour + minute / 60  # 计算移动的小时

    secHand.setheading(6 * second)  # 设置秒针的角度
    minHand.setheading(6 * minute)  # 设置分针的角度
    hurHand.setheading(30 * hour)  # 设置时针的角度

    turtle.tracer(False)  # 关闭绘画效果
    printer.forward(65)  # 向上移动65
    # 绘制星期
    printer.write(week(t), align="center", font=("Courier", 14, "bold"))
    printer.back(130)  # 倒退130
    # 绘制年月日
    printer.write(day(t),align="center", font=("Courier", 14, "bold"))
    printer.home()  # 归位
    turtle.tracer(True)  # 开启绘画效果
    turtle.ontimer(tick(),100) # 10毫秒后调用tick()方法

    pass

def main():

    turtle.tracer(False) # 关闭绘画效果
    init() #初始化指针
    set_up(170) #初始化表盘
    turtle.tracer(True) # 开始绘画效果
    tick()
    turtle.done()
    turtle.mainloop()  # 不关闭窗体

    pass

if __name__ == '__main__':
    main()
